/**
 * Copyright ©2003~2019年1月22日 szkingdom
 * @author raohj
 * @date 2019年1月22日
 * @file RBaseType.java
 * @comment : please input your comment to this file
 * @version : input version
 * @modify:
 * 		1、 2019年1月22日 由 raohj 新建文件
 */
package com.ccnu.demojava.grammar;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;

/**
 * @author raohj
 * @date 2019年1月22日
 * @version 
 * @comment to add your comment
 */
public class RGrammar {
	static Logger log = LoggerFactory.getLogger(RGrammar.class);

	enum days{
		Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
	}
	
	/**
	 * @author raohj
	 * @date 2019年3月6日
	 * @comment 测试Java的基本类型
	 * @param 
	 * @return 
	 */
	public static void testBaseType() {
		double d = 1.36E100;
		float f = (float) d;
		float ta = 250000 * 3500000;
		System.out.println(ta);
		
		float taf = 250000f * 3500000f;
		System.out.println(taf);
		
		System.out.println("double转float之后的值为[" + f + "]");
		
		System.out.println("测试枚举类型：[" + days.Monday + "]");
		
		// 数学计算
		System.out.println("tan90°:[" + Math.tan(Math.toRadians(90.00d)) + "]");
		System.out.println("tan45°:[" + Math.tan(Math.toRadians(45.00d)) + "]");
		System.out.println("sin90°:[" + Math.sin(Math.toRadians(90.00d)) + "]");
		
		// 字符判断
		char a = 'A';
		System.out.println("字符判断A是否是数字:[" + Character.isDigit(a) + "]");

		
		// 测试带标签的continue
		int nLoopTimes = 0;
		Integer nL = 0;
		ContinuePoint:
			for(int i=0; i<100; i++) {
				if((i%99==0) && nLoopTimes<3 ) {
					System.out.println("第[" + (nLoopTimes++) + "] 进循环");
					continue ContinuePoint;
				}
			}
		System.out.println("continue flag 测试结束啦");
		
		// 测试带标签的break
		nLoopTimes = 0;
		BreakPoint:{
			for(int i=0; i<100; i++) {
				if(i%99 ==0 && nLoopTimes<3) {
					System.out.println("第[" + (nLoopTimes++) + "] 进循环");
					break BreakPoint;
				}
			}
		}
		System.out.println("break flag 测试结束啦");
		
		// 断言
		int j=0;
		try {
//			assert (j!=0);
//			assert (j!=0):"测试断言的消息输出";
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("测试assert");
		
		// 测试数组
		int iArray[] = new int[10];
		Arrays.fill(iArray, 1);
		System.out.print("测试整形数组:");
		for (int i = 0; i < iArray.length; i++) {
			System.out.print("[" + iArray[i] + "]");
		}
		System.out.print("\n");
		
		System.out.print("测试foreach");
		for (int i : iArray) {
			System.out.print("[" + i + "]");
		}
		System.out.print("\n");
		
		double dArray [] = new double[10];
		Arrays.fill(dArray, 0, 5, 1.00d);
		System.out.print("测试浮点型数组:");
		for (int i = 0; i < dArray.length; i++) {
			System.out.print("[" + dArray[i] + "]");
		}
		System.out.print("\n");
		
		// 测试字符串
		String s1 = "raohaijun";
		String s2 = "raohaijun";
		System.out.println("测试字符串是否引用同一地址[" + (s1==s2) + "]");
		
		String s3 = "20190523|20180328ZGDX00001051|034|20180328|123000|6213666666789647952|6213666666789647952|0000299000009003765|20180328|123000|20190523|333333333333|156|80000|||0|0||";
		String [] strSplit = s3.split("\\|", -1);
				
		// 线程安全可变字符串
		StringBuffer sbf = new StringBuffer();
		
		// 非线程安全可变字符串
		StringBuilder sbd = new StringBuilder();
		
		// 测试位运算
		short sBitA = 0b11111111;
		short sBitB = 0b01000001;
		short sBitXOR = (short) (sBitA^sBitB);
		System.out.println("0b11111111^0b01000001=" + sBitXOR+"=ob" + Integer.toBinaryString((int)sBitXOR));
		
		// 测试作用域
		{
			
		}

		List<Integer> tList = null;
		for (Integer t : tList ) {

		}

		String s1s = "raohaijun";
		String s2s = "raohaijun";
		if ( s1s == s2s) {

		}

		if ( s1s.equals(s2s) ) {

		}
	}

	/**
	 * @author raohj
	 * @date 2019年3月5日
	 * @comment 测试参数被申明为final时，不能修改参数的引用。 但是依然可以修改参数引用的对象的值
	 * @param 
	 * @return 
	 * @param value
	 */
	public void testFinalParam(final String value) {
//		value = "raohaijun";
	}
	
	/**
	 * @author raohj
	 * @date 2019年3月6日
	 * @comment 测试java的可变参数
	 * @param 
	 * @return 
	 * @param args
	 */
	public static void testArgs(Object ... args) {
		for(Object arg : args) {
			System.out.println(arg.toString());
		}
	}
	
	public static void testArgs1(int argn, Object ... args) {
		for(Object arg : args) {
			System.out.println(arg.toString());
		}
	}
	
	public static void testString() {
		String testString = new String("饶海军test");
		log.info(testString.substring(0, 2).toString());
		log.info(testString.concat("金证股份"));
		testString.getBytes(Charset.forName("GBK"));
	}
	
	/**
	 * @author raohj
	 * @date 2019年3月6日
	 * @comment 测试Lambda表达式
	 * @param 
	 * @return 
	 */
	public static void testLambda() {
		String [] planets = new String[] {
				"rhjdasa",
				"dfadasfas",
				"fdasfasdfasdfasfas",
				"ff",
				"f"
		};
		log.debug(Arrays.toString(planets));
		Arrays.sort(planets);
		log.debug(Arrays.toString(planets));
		
		// user the lambda express
//		Arrays.sort(planets, (first,second)->{
//			return first.length() - second.length();
//		});
		log.debug(Arrays.toString(planets));
	}
}
